/**
 * 计算指定类型的时间范围（返回[start, end]）
 * @param {String} type 时间类型：today/week/month/quarter/year
 * @returns {Array} [startDate, endDate] 日期对象数组
 */
export function getTimeRange(type) {
    let start, end
    switch (type) {
        case 'today': {
            let today = getCurrentDayRange();
            start = today.beginDateTime
            end = today.endDateTime
            break
        }
        case 'week': {
            let curWeek = getCurrentWeekRange();
            start = curWeek.beginDateTime
            end = curWeek.endDateTime
            break
        }
        case 'month': {
            let curMonth = getCurrentMonthRange();
            start = curMonth.beginDateTime
            end = curMonth.endDateTime
            break
        }
        case 'quarter': {
            let curQuarter = getCurrentQuarterRange();
            start = curQuarter.beginDateTime
            end = curQuarter.endDateTime
            break
        }
        case 'year': {
            let curYear = getCurrentYearRange();
            start = curYear.beginDateTime
            end = curYear.endDateTime
            break
        }
        default: {
            return [null, null]
        }
    }
    return [start, end]
}


/**
 * 生成最近24小时的时间范围（开始时间和结束时间）
 * @returns {Object} { beginDateTime, endDateTime } 格式为 "YYYY/MM/DD HH:MM:SS"
 */
export function getLast24HoursRange() {
    const endTime = new Date(); // 结束时间：当前时间
    const startTime = new Date(endTime.getTime() - 24 * 60 * 60 * 1000); // 开始时间：24小时前

    // 格式化日期为 "YYYY/MM/DD HH:MM:SS"
    const format = (date) => {
        const year = date.getFullYear();
        const month = String(date.getMonth() + 1).padStart(2, '0');
        const day = String(date.getDate()).padStart(2, '0');
        const hours = String(date.getHours()).padStart(2, '0');
        const minutes = String(date.getMinutes()).padStart(2, '0');
        const seconds = String(date.getSeconds()).padStart(2, '0');
        return `${year}/${month}/${day} ${hours}:${minutes}:${seconds}`;
    };

    let x = 1
    if (x===1) {
        return {
            beginDateTime: '2025/10/02 00:00:00',
            endDateTime: '2025/10/02 23:59:59',
        }
    }

    return {
        beginDateTime: format(startTime),
        endDateTime: format(endTime)
    };

}



/**
 * 生成当天的时间范围（00:00:00 至 23:59:59）
 * @returns {Object} { beginDateTime, endDateTime } 格式为 "YYYY/MM/DD HH:MM:SS"
 */
export function getCurrentDayRange() {
    const today = new Date(); // 当前日期
    const year = today.getFullYear();
    const month = today.getMonth(); // 月份从0开始（0=1月）
    const date = today.getDate();
    // 开始时间：今天 00:00:00
    const beginTime = new Date(year, month, date, 0, 0, 0);
    // 结束时间：今天 23:59:59
    const endTime = new Date(year, month, date, 23, 59, 59);
    return {
        beginDateTime: format(beginTime),
        endDateTime: format(endTime)
    };
}



/**
 * 生成本周的时间范围（周一到周日）
 * @returns {Object} { beginDateTime, endDateTime } 格式为 "YYYY/MM/DD HH:MM:SS"
 */
export function getCurrentWeekRange() {
    const today = new Date();
    const dayOfWeek = today.getDay(); // 0=周日, 1=周一, ..., 6=周六
    // 计算本周一的日期
    const monday = new Date(today);
    monday.setDate(today.getDate() - (dayOfWeek === 0 ? 6 : dayOfWeek - 1));
    // 计算本周日的日期
    const sunday = new Date(monday);
    sunday.setDate(monday.getDate() + 6);
    // 开始时间：周一 00:00:00
    const beginTime = new Date(monday.getFullYear(), monday.getMonth(), monday.getDate(), 0, 0, 0);
    // 结束时间：周日 23:59:59
    const endTime = new Date(sunday.getFullYear(), sunday.getMonth(), sunday.getDate(), 23, 59, 59);
    return {
        beginDateTime: format(beginTime),
        endDateTime: format(endTime)
    };
}



/**
 * 生成本月的时间范围（1日到最后一日）
 * @returns {Object} { beginDateTime, endDateTime } 格式为 "YYYY/MM/DD HH:MM:SS"
 */
export function getCurrentMonthRange() {
    const today = new Date();
    const year = today.getFullYear();
    const month = today.getMonth(); // 0=1月, 1=2月, ..., 11=12月
    // 开始时间：当月1日 00:00:00
    const beginTime = new Date(year, month, 1, 0, 0, 0);
    // 结束时间：当月最后一日 23:59:59
    const lastDay = new Date(year, month + 1, 0).getDate(); // 获取当月最后一天
    const endTime = new Date(year, month, lastDay, 23, 59, 59);
    return {
        beginDateTime: format(beginTime),
        endDateTime: format(endTime)
    };
}


/**
 * 生成本季度的时间范围
 * @returns {Object} { beginDateTime, endDateTime } 格式为 "YYYY/MM/DD HH:MM:SS"
 */
export function getCurrentQuarterRange() {
    const today = new Date();
    const year = today.getFullYear();
    const month = today.getMonth();
    // 计算当前季度
    const quarter = Math.floor(month / 3);
    // 季度开始月份（0=1月, 3=4月, 6=7月, 9=10月）
    const startMonth = quarter * 3;
    // 季度结束月份
    const endMonth = startMonth + 2;
    // 开始时间：季度第一天 00:00:00
    const beginTime = new Date(year, startMonth, 1, 0, 0, 0);
    // 结束时间：季度最后一天 23:59:59
    const lastDay = new Date(year, endMonth + 1, 0).getDate(); // 获取季度最后一个月最后一天
    const endTime = new Date(year, endMonth, lastDay, 23, 59, 59);
    return {
        beginDateTime: format(beginTime),
        endDateTime: format(endTime)
    };
}

/**
 * 生成当前年份的完整时间范围（1月1日到12月31日）
 * @param {number} [year] 可选参数，指定年份（如不传入则默认当前年份）
 * @returns {Object} { beginDateTime, endDateTime } 格式为 "YYYY/MM/DD HH:MM:SS"
 */
export function getCurrentYearRange(year) {
    // 若未指定年份，则使用当前年份
    const targetYear = year || new Date().getFullYear();
    // 开始时间：当年1月1日 00:00:00
    const beginTime = new Date(targetYear, 0, 1, 0, 0, 0);
    // 结束时间：当年12月31日 23:59:59
    const endTime = new Date(targetYear, 11, 31, 23, 59, 59);
    return {
        beginDateTime: format(beginTime),
        endDateTime: format(endTime)
    };
}


// 复用格式化方法
function format(date) {
    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, '0');
    const day = String(date.getDate()).padStart(2, '0');
    const hours = String(date.getHours()).padStart(2, '0');
    const minutes = String(date.getMinutes()).padStart(2, '0');
    const seconds = String(date.getSeconds()).padStart(2, '0');
    return `${year}/${month}/${day} ${hours}:${minutes}:${seconds}`;
}
